package com.auqaoasis.model.page;

import com.auqaoasis.model.row.Row;
import com.auqaoasis.model.table.TableDesc;

import java.io.IOException;
import java.util.Iterator;

/**
 * @Author Auqaoasis
 * @Date 2022/4/1 - 21:45
 * @Description:
 */
public interface Page {
    /**
     * 默认每页4KB
     */
    int defaultPageSizeInByte = 4096;

    PageID getPageID();

    /**
     * 序列化page数据
     */
    byte[] serialize() throws IOException;

    /**
     * 反序列化pageData到page对象
     */
    void deserialize(byte[] pageData) throws IOException;

    /**
     * 一页数据最多可存放的数据行数
     */
    int getMaxSlotNum();

    boolean hasEmptySlot();

    boolean isSlotUsed(int index);

    /**
     * 计算返回一页数据可存放的数据行数
     */
    int calculateMaxSlotNum(TableDesc tableDesc);



    Iterator<Row> getRowIterator();
}
